//实现引用类型数据的深拷贝

//如果是数组里面没有引用类型数据；如果数组里面还存储有数组，这个时候的深拷贝有如何实现

// let deepClone =value=>{
//     let result=[]
//     value.forEach((value,index) => {
//         if(typeof(value)=='object'){
//             result[index]=deepClone(value)
//         }
//     })
//     return result
// }

// let arr=[1,3,4]
// let arr2=deepClone(arr)
// arr[2]=5
// console.log(arr2(2))

//如果里面存储数组，可以实现深拷贝
//扩展：如果里面既有数组，又有对象数据，这个时候如何来实现深拷贝

let dataType =data=>{
    return Object.prototype.toString.call(data).slice(8,-1)
}
let deepClone =target=>{
    let result
    let targetType=dataType(target)
    if (targetType==="Object") {
        result={}
    }else if (targetType==='Array') {
        result=[]
    }else{
        return target
    }
    //for((value,index) in target){}
    for(let [index,value] of Object.entries(target))
    {
        let valueType=dataType(value)
        if (valueType==='Array') {
            result[index] =deepClone(value)
        }
        else
            result[index]=value
    }
    return result
}

let obj1={a:4,b:6,c:[2,3,5]}
let obj2=deepClone(obj1)
obj1['c'][2]=9
console.log(obj2['c'][2])

let arr1 =[2,3,{a:2,b:4}]
let arr2=deepClone(arr1)
arr1[2]['a']=9
console.log(arr2[2]['a'])